package org.spring.aop.support;

import com.sun.istack.internal.Nullable;
import org.tool.reflect.ReflectUtil;

import java.lang.reflect.Method;

import static org.tool.reflect.ReflectUtil.ReflectConstant.METHOD_FINALIZE;

/**
 * Aop 相关工具类
 *
 * @author 李坤
 * @date 2022/4/18 11:26
 */
public abstract class AopUtil {

    /**
     * 一个空的 Class 数组
     */
    public static final Class<?>[] EMPTY_CLASS_ARRAY = {};

    /**
     * 确定给定的方法是否是 "equals" 方法。
     *
     * @see Object#equals
     */
    public static boolean isEqualsMethod(@Nullable Method method) {
        return ReflectUtil.isEqualsMethod(method);
    }

    /**
     * 确定给定的方法是否是 "hashCode" 方法。
     *
     * @see Object#hashCode
     */
    public static boolean isHashCodeMethod(@Nullable Method method) {
        return ReflectUtil.isHashCodeMethod(method);
    }

    /**
     * 确定给定的方法是否是 "toString" 方法。
     *
     * @see Object#toString()
     */
    public static boolean isToStringMethod(@Nullable Method method) {
        return ReflectUtil.isToStringMethod(method);
    }

    /**
     * 确定给定的方法是否是 "finalize" 方法。
     *
     * @see Object#finalize()
     */
    public static boolean isFinalizeMethod(@Nullable Method method) {
        return (method != null && method.getName().equals(METHOD_FINALIZE) && method.getParameterCount() == 0);
    }

}
